package com.gmgx.hrms.dao.impl;

import com.gmgx.hrms.dao.DeptDao;
import com.gmgx.hrms.dao.EmpDao;
import com.gmgx.hrms.entity.Emp;
import com.gmgx.hrms.util.JDBCTools;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class EmpDaoImpl implements EmpDao {
    private JDBCTools tools=new JDBCTools();
    @Override
    public Emp queryEmpByNameAndPwd(String lname, String lpwd) {
        Emp emp=null;
       ResultSet rs= tools.query("select * from t_emp where emp_lname=? and emp_lpwd=md5(?) ",lname,lpwd);
        try {
            if(rs.next()){
                emp=new Emp();
                emp.setEmp_bday(rs.getDate("emp_bday").toLocalDate());
                emp.setEmp_join(rs.getDate("emp_join").toLocalDate());
                emp.setEmp_id(rs.getInt("emp_id"));
                emp.setEmp_idcard(rs.getString("emp_idcard"));
                emp.setEmp_lname(rs.getString("emp_lname"));
                emp.setEmp_lpwd(rs.getString("emp_lpwd"));
                emp.setEmp_salary(rs.getDouble("emp_salary"));
                emp.setEmp_sex(rs.getString("emp_sex"));
                emp.setEmp_rname(rs.getString("emp_rname"));
                emp.setEmp_status(rs.getString("emp_status"));
                emp.setEmp_tel(rs.getString("emp_tel"));

             int   deptid= rs.getInt("emp_dept");
             //调用deptdao的方法获取部门id对应的部门对象
                DeptDao dao1=new DeptDaoImpl();
              emp.setEmp_dept( dao1.queryDeptById(deptid));

              //同理 ，角色也是
                emp.setEmp_role(new RoleDaoImpl().queryRoleById(rs.getInt("emp_role")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            tools.clossAll();
        }


        return emp;
    }

    @Override
    public Emp queryEmpById(int empid) {
        Emp  emp=null;
        ResultSet rs=tools.query("select * from t_emp where emp_id=?",empid);
        try {
            while(rs.next()){
                emp=new Emp();
                emp.setEmp_bday(rs.getDate("emp_bday").toLocalDate());
                emp.setEmp_join(rs.getDate("emp_join").toLocalDate());
                emp.setEmp_id(rs.getInt("emp_id"));
                emp.setEmp_idcard(rs.getString("emp_idcard"));
                emp.setEmp_lname(rs.getString("emp_lname"));
                emp.setEmp_lpwd(rs.getString("emp_lpwd"));
                emp.setEmp_salary(rs.getDouble("emp_salary"));
                emp.setEmp_sex(rs.getString("emp_sex"));
                emp.setEmp_rname(rs.getString("emp_rname"));
                emp.setEmp_status(rs.getString("emp_status"));
                emp.setEmp_tel(rs.getString("emp_tel"));

                int   deptid= rs.getInt("emp_dept");
                //调用deptdao的方法获取部门id对应的部门对象
                DeptDao dao1=new DeptDaoImpl();
                emp.setEmp_dept( dao1.queryDeptById(deptid));

                //同理 ，角色也是
                emp.setEmp_role(new RoleDaoImpl().queryRoleById(rs.getInt("emp_role")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            tools.clossAll();
        }

        return emp;
    }

    @Override
    public boolean queryEmpByName(String lname) {
        boolean result=false;
        ResultSet rs= tools.query("select * from t_emp where emp_lname=? ",lname);
        try {
            if(rs.next()){
             result=true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            tools.clossAll();
        }


        return result;
    }

    @Override
    public boolean addEmp(Emp emp) {
       int i= tools.update("insert into t_emp(emp_lname,emp_lpwd,emp_rname,emp_sex,emp_salary,emp_tel,emp_bday,emp_join,emp_status,emp_idcard,emp_dept,emp_role) " +
                "values(?,md5(?),?,?,?,?,?,?,?,?,?,?)",emp.getEmp_lname(),emp.getEmp_lpwd(),emp.getEmp_rname(),emp.getEmp_sex(),emp.getEmp_salary(),emp.getEmp_tel(),emp.getEmp_bday(),emp.getEmp_join(),
                emp.getEmp_status(),emp.getEmp_idcard(),emp.getEmp_dept().getDept_id(),emp.getEmp_role().getRole_id());
        return i>0;
    }

    @Override
    public List<Emp> queryAllEmp() {
        List<Emp> list=new ArrayList<>();
        ResultSet rs=tools.query("select * from t_emp");
        try {
            while(rs.next()){
                Emp emp=new Emp();
                emp.setEmp_bday(rs.getDate("emp_bday").toLocalDate());
                emp.setEmp_join(rs.getDate("emp_join").toLocalDate());
                emp.setEmp_id(rs.getInt("emp_id"));
                emp.setEmp_idcard(rs.getString("emp_idcard"));
                emp.setEmp_lname(rs.getString("emp_lname"));
                emp.setEmp_lpwd(rs.getString("emp_lpwd"));
                emp.setEmp_salary(rs.getDouble("emp_salary"));
                emp.setEmp_sex(rs.getString("emp_sex"));
                emp.setEmp_rname(rs.getString("emp_rname"));
                emp.setEmp_status(rs.getString("emp_status"));
                emp.setEmp_tel(rs.getString("emp_tel"));

                int   deptid= rs.getInt("emp_dept");
                //调用deptdao的方法获取部门id对应的部门对象
                DeptDao dao1=new DeptDaoImpl();
                emp.setEmp_dept( dao1.queryDeptById(deptid));

                //同理 ，角色也是
                emp.setEmp_role(new RoleDaoImpl().queryRoleById(rs.getInt("emp_role")));
                list.add(emp);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            tools.clossAll();
        }


        return list;
    }

    @Override
    public boolean updateEmpForHR(Emp emp) {
      int i=  tools.update("update t_emp set emp_rname=?,emp_lpwd=md5(?),emp_idcard=?,emp_sex=?,emp_bday=?,emp_tel=?  where emp_id=?",
                emp.getEmp_rname(),emp.getEmp_lpwd(),emp.getEmp_idcard(),emp.getEmp_sex(),emp.getEmp_bday(),emp.getEmp_tel(),emp.getEmp_id());
        return i>0;
    }

    @Override
    public boolean updateEmpStatusByEmpid(String status, int empid) {
      int i=   tools.update("update t_emp set emp_status=? where emp_id=?",status,empid);
        return i>0;
    }
}
